﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace QldtSdh.GUI.DaoTao
{
    using BLL;
    using DAL;
    using DAL.Models;
    using GUI.Utils;
    using QldtSdh.GUI.Common;
    using QldtSdh.Utils;

    public partial class FormLopHocPhan_ThoiKhoaBieu_ChiTiet : QldtSdh.GUI.Common.BaseDialog
    {
        private LopHocPhan _LopHocPhan;
        private string _MaGiangVien;
        private string _MaPhongHoc;
        private DateTime _NgayHoc;
        private int _BuoiHoc;
        private bool _TaoMoi;
        private LopHocPhan_ThoiKhoaBieu _ThoiKhoaBieuObject;

        public FormLopHocPhan_ThoiKhoaBieu_ChiTiet()
        {
            InitializeComponent();
        }

        public FormLopHocPhan_ThoiKhoaBieu_ChiTiet(
            LopHocPhan lopHocPhan,
            string maGiangVien,
            string maPhongHoc, DateTime ngayHoc, int buoiHoc,
            IList<LopHocPhan_PhanCongGiangDay> lstPhanCongGiangDay,
            IList<PhongHoc> lstPhongHoc, bool TaoMoi = true)
            : this()
        {
            this._TaoMoi = TaoMoi;
            this._LopHocPhan = lopHocPhan;
            this._MaGiangVien = maGiangVien;
            this._MaPhongHoc = maPhongHoc;
            this._NgayHoc = ngayHoc;
            this._BuoiHoc = buoiHoc;

            this.Text = _TaoMoi ? "Tạo mới mục Thời khoá biểu" : "Chỉnh sửa mục Thời khoá biểu";

            bsPhanCongGiangDay.DataSource = lstPhanCongGiangDay;
            cbxGiangvien.DisplayMember = "_GiangVienDesc";
            cbxGiangvien.DataSource = bsPhanCongGiangDay;
            bsPhongHoc.DataSource = lstPhongHoc;
            cbxPhonghoc.DisplayMember = "TenPhongHoc";
            cbxPhonghoc.ValueMember = "MaPhongHoc";
            cbxPhonghoc.DataSource = bsPhongHoc;

            for (int i = 0; i < lstPhanCongGiangDay.Count; i++)
                if (lstPhanCongGiangDay[i].MaGiangVien == _MaGiangVien)
                {
                    bsPhanCongGiangDay.Position = i;
                    break;
                }
            for (int i = 0; i < lstPhongHoc.Count; i++)
                if (lstPhongHoc[i].MaPhongHoc == _MaPhongHoc)
                {
                    bsPhongHoc.Position = i;
                    break;
                }

            cbxBuoiHoc.SelectedIndex = _BuoiHoc;
            dtpNgayHoc.Value = _NgayHoc.Date;
        }

        public FormLopHocPhan_ThoiKhoaBieu_ChiTiet(
            LopHocPhan _LopHocPhan,
            LopHocPhan_ThoiKhoaBieu tkb,
            IList<LopHocPhan_PhanCongGiangDay> lstPhanCongGiangDay,
            IList<PhongHoc> lstPhongHoc)
            : this(_LopHocPhan, tkb.MaGiangVien, tkb.MaPhongHoc, tkb.NgayHoc, tkb.BuoiHoc, lstPhanCongGiangDay, lstPhongHoc, false)
        {
            this._LopHocPhan = _LopHocPhan;
            this._ThoiKhoaBieuObject = tkb;
        }

        private void btnDongY_Click(object sender, EventArgs e)
        {
            LopHocPhan_PhanCongGiangDay giangVien = null;
            if (bsPhanCongGiangDay.Current != null)
                giangVien = bsPhanCongGiangDay.Current as LopHocPhan_PhanCongGiangDay;
            _MaGiangVien = giangVien == null ? null : giangVien.MaGiangVien;
            var _MaGiangVienDaoTaoDaiHoc = (_MaGiangVien == null || !Program.KiemTraThoiKhoaBieuDaiHoc) ? "" : BizGiangVien.GetByID2(_MaGiangVien).MaGiangVienDaoTaoDaiHoc;
            if (_MaGiangVien == null)
            {
                DialogUtils.ShowErrorWithDefaultTitle("Bạn phải chọn giảng viên cho mục thời khoá biểu");
                return;
            }

            PhongHoc phongHoc = null;
            if (bsPhongHoc.Current != null)
                phongHoc = bsPhongHoc.Current as PhongHoc;
            _MaPhongHoc = phongHoc == null ? null : phongHoc.MaPhongHoc;

            if (_MaPhongHoc == null)
            {
                DialogUtils.ShowErrorWithDefaultTitle("Bạn phải chọn phòng học cho mục thời khoá biểu");
                return;
            }

            _BuoiHoc = cbxBuoiHoc.SelectedIndex;
            _NgayHoc = dtpNgayHoc.Value.Date;

            try
            {
                if (_TaoMoi)
                    BizThoiKhoaBieu.InsertThoiKhoaBieu(_LopHocPhan, _MaGiangVien, _MaGiangVienDaoTaoDaiHoc, _MaPhongHoc, _NgayHoc, _BuoiHoc, txtMoTa.Text, Program.KiemTraThoiKhoaBieuDaiHoc);
                else
                    BizThoiKhoaBieu.UpdateThoiKhoaBieu(_ThoiKhoaBieuObject.MaLopHocPhan_ThoiKhoaBieuGUID, _LopHocPhan, _MaGiangVien, _MaGiangVienDaoTaoDaiHoc, _MaPhongHoc, _NgayHoc, _BuoiHoc, txtMoTa.Text, Program.KiemTraThoiKhoaBieuDaiHoc);
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
                this.Close();
            }
            catch (Exception exc)
            {
                if (_TaoMoi)
                    DialogUtils.ShowErrorWithDefaultTitle("Không tạo được mục thời khoá biểu.\nChi tiết lỗi: {0}", exc.Message);
                else
                    DialogUtils.ShowErrorWithDefaultTitle("Không chỉnh sửa được mục thời khoá biểu.\nChi tiết lỗi: {0}", exc.Message);
            }
        }
    }
}
